<?php

/**
 * 
 * Description of class Actie
 * Klassen om een actie vanuit de werkplekinspectie op te slaan, aan te passen, verwijderen of op te halen.
 * 
 * @version 0.1
 * @author Sander van Belleghem
 * @editor Leander Molegraaf
 * 
 */
require_once 'defs/Constants.php';
require_once FILE_DB_ACTIE;

class Actie {

    //private $inspectie_id;
    private $error_count = '';
    private $actie_id;
    private $actie_punt = '';
    private $actie = '';
    private $uitvoerende = '';
    private $inspectie_id;
    //default value is om problemen te voorkomen bij het opslaan van een actie die nog geen datum heeft
    private $actie_datum = '00-00-0000';

    public function __construct($actie_id = '') {
//        if (empty($inspectie_id)) {
//            throw new Exception ('Geen ID opgegeven!');   
//        }

        $this->actie_id = $actie_id;
    }

    // Getters    
    public function getActie() {
        return $this->actie;
    }

    public function getActieDatum() {
        return $this->actie_datum;
    }

    public function getActieId() {
        return $this->actie_id;
    }

    public function getActiePunt() {
        return $this->actie_punt;
    }

    public function getActieUitvoerende() {
        return $this->uitvoerende;
    }

    public function getInspectieId() {
        return $this->inspectie_id;
    }

    // Setters        
    public function setActie($actie) {
        if ($this->controle->checkString($actie, DB_NUMBER_COMON_MAXIMUM, MINIMUM_ALGEMEEN)) {
            return $this->actie = $actie;
        } else {
            $this->error_count++;
            echo WHITE_SPACE_ENTER;
            echo ACTIE_ERROR_GEENACTIE;
        }
    }

    public function setActieDatum($actie_datum) {
        if ($this->controle->checkString($actie_datum, DB_NUMBER_COMON_MAXIMUM, MINIMUM_ALGEMEEN)) {
            return $this->actie_datum = $actie_datum;
        } else {
            $this->error_count++;
            echo WHITE_SPACE_ENTER;
            echo ACTIE_ERROR_GEENDATUM;
        }
    }

    public function setActieId($actie_id) {
        if ($this->controle->checkInt($actie_id, DB_NUMBER_REGISTRATIE_MAXIMUM, MINIMUM_ALGEMEEN)) {
            return $this->actie_id = $actie_id;
        } else {
            $this->error_count++;
            echo WHITE_SPACE_ENTER;
            echo ACTIE_ERROR_GEENACTIEID;
        }
    }

    public function setActiePunt($actie_punt) {
        if ($this->controle->checkInt($actie_punt, DB_NUMBER_REGISTRATIE_MAXIMUM, MINIMUM_ALGEMEEN)) {
            return $this->actie_punt = $actie_punt;
        } else {
            $this->error_count++;
            echo WHITE_SPACE_ENTER;
            echo ACTIE_ERROR_GEENACTIEPUNT;
        }
    }

    public function setActieUitvoerende($uitvoerende) {
        if ($this->controle->checkInt($uitvoerende, DB_NUMBER_COMON_MAXIMUM, MINIMUM_ALGEMEEN)) {
            return $this->uitvoerende = $uitvoerende;
        } else {
            $this->error_count++;
            echo WHITE_SPACE_ENTER;
            echo ACTIE_ERROR_GEENUITVOERENDE;
        }
    }
    
    public function setInspectieId($new){
        $this->inspectie_id = $new;
    }
    
    public function checkError() {
        if($this->error_count != 0) {
            echo WHITE_SPACE_ENTER;
            echo GUI_FOUTEN_GEVONDEN_ERROR;
        } else {
            echo WHITE_SPACE_ENTER;
            echo GUI_GEEN_FOUTEN_GEVONDEN_ERROR;
            $new = new Actie();
            $new->save();
        }
    }
    
    /**
     * Haalt alle acties uit de database die bij een bepaalde inspectie horen
     * @author Leander Molegraaf
     * @param Int $inspectie_id
     * @return Arrays met actie-gegevens
     */
    public function getActiesFromDatabase($inspectie_id){
        $database = new DbActie();
        return ($database->getInspectieActies($inspectie_id));
    }

    public function delete() {
        $database = new DbActie($this->actie_id);
        $database->delete();
    }

    public function save($inspectie_id) {
        $database = new DbActie();
        $database->save($inspectie_id, $this->actie_punt, $this->actie, $this->uitvoerende, $this->actie_datum);
    }

    public function update() {
        $database = new DbActie($this->actie_id);
        $database->update($this->inspectie_id, $this->actie_punt, $this->actie, $this->uitvoerende, $this->actie_datum);
    }

}

class TestActie {

    public function TestActie() {
        try {
            $test = new Actie();

            $test->setActieId(ACTIE_TEST_ACTIEID);
            $test->setActiePunt(ACTIE_TEST_ACTIEPUNT);
            $test->setActie(ACTIE_TEST_ACTIE);
            $test->setActieUitvoerende(ACTIE_TEST_UITVOERENDE);
            $test->setActieDatum(ACTIE_TEST_DATUM);
            $test->update();

            echo "<pre>";
            $this->test_var_dump($test);
            echo "</pre>";
        }

        //Catch exception
        catch (Exception $e) {
            echo 'Message : ' . $e->getMessage() . '<pre>' . $e->getTraceAsString() . '</pre>';

            $this->test_var_dump($test);
        }
    }

    private function test_var_dump($var) {

        echo "<pre>";
        var_dump($var);
        echo "</pre>";
    }

}

?>
